package com.scheduling.schedule.enums;

import lombok.Getter;

/**
 * 排产算法类型枚举
 *
 * @author 开发团队
 */
@Getter
public enum ScheduleAlgorithmType {


    /**
     * 同种产品集中生产排产
     */
    PRODUCT_BATCH("PRODUCT_BATCH", "同种产品集中生产"),

    /**
     * 机器利用率优先排产
     */
    MACHINE_UTILIZATION("MACHINE_UTILIZATION", "机器利用率优先"),

    /**
     * 默认排产（FIFO - 先进先出）
     */
    DEFAULT_FIFO("DEFAULT_FIFO", "默认排产"),

    /**
     * 增强遗传算法排产（基于工艺路线）
     */
    ENHANCED_GENETIC_ALGORITHM("ENHANCED_GENETIC_ALGORITHM", "增强遗传算法（基于工艺路线）"),

    /**
     * 关键路径法结合最短处理时间优先
     */
    CRITICAL_PATH_SPT("CRITICAL_PATH_SPT", "关键路径法+最短处理时间优先"),

    /**
     * 结合紧急优先以及机器利用率
     */
    COMBINE_ALGORITHM("COMBINE_ALGORITHM", "紧急优先+机器利用率最大");

    private final String code;
    private final String description;

    ScheduleAlgorithmType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 根据代码获取枚举
     *
     * @param code 算法代码
     * @return 算法类型枚举
     */
    public static ScheduleAlgorithmType fromCode(String code) {
        for (ScheduleAlgorithmType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("不支持的算法类型: " + code);
    }

    /**
     * 获取所有算法代码
     *
     * @return 算法代码数组
     */
    public static String[] getAllCodes() {
        ScheduleAlgorithmType[] types = values();
        String[] codes = new String[types.length];
        for (int i = 0; i < types.length; i++) {
            codes[i] = types[i].getCode();
        }
        return codes;
    }
} 